// pages/films/index.js
Page({
	regexTest(){ //正则表达式的编程测试
		let s = 'a123 www  bbb456 999 ccc789';
		let r, regex = /([a-z]+)(\d+)/g;
		while (r = regex.exec(s)) {
			console.log(r);
		}
	},
	sleep(job,ms) { //返回的是Promise对象
		return new Promise((resolve, reject) => {
			setTimeout(() => {
				resolve(job + ' done!')
			}, ms)
		})
	},
	async Demo() { //await所在的函数必须是 async
		let r=await this.sleep('job1',5000) //await等待异步请求返回结果
		console.log(r)
		r=await this.sleep('job2',3000)
		console.log(r)
		r=await this.sleep('job3',1000)
		console.log(r)
	},
	
	async types(e){ //点击类型项时执行
		let index=e.target.dataset.index //点击类型项的索引号
		if(index==null)return //没有点击到任何类型项，直接返回
		let menuIndex=this.data.menuIndex //当前菜单的索引号
		let menu=this.data.menus[menuIndex] //当前菜单项
		let oldTypeIndex=menu.typeIndex //原来类型项的索引号
		let change={} //记录有变化的数据
		if(oldTypeIndex!=null)change[`menus[${menuIndex}].types[${oldTypeIndex}].selected`]=false
		change[`menus[${menuIndex}].types[${index}].selected`]=true 
		change[`menus[${menuIndex}].typeIndex`]=index //当前类型项的索引号
		this.setData(change)
		let app=getApp() //获取小程序对象
		let type=menu.types[index] //当前点击的类型项
		if(type.list && type.list.length>0) return //原来有数据就直接返回
		let s=await app.request({ url:`${this.host}/by/${type.id}.html`})
		let r, list=[], regex = /href="([^"]+)" title="([^"]+)" class="module-item-pic"><img class="lazyload" data-src="([^"]+)"/g;
		while (r = regex.exec(s)) {
			list.push({
				url: r[1], //网址
				title: r[2], //标题
				img: r[3], //图片
			})
		}
		console.log(list)
		this.setData({
			[`menus[${menuIndex}].types[${index}].list`]: list, //保存视频列表数据
		})
	},
	menus(e){ //点击菜单项时执行
		let index=e.target.dataset.index //点击菜单项的索引号
		if(index==0){ //点击的刷新
			return
		}
		let oldIndex=this.data.menuIndex //原来点击菜单的索引号
		let change={ menuIndex:index } //记录有变化的数据
		change[`menus[${oldIndex}].selected`]=false
		change[`menus[${index}].selected`]=true
		this.setData(change)
	},
	onHide() { // 页面从前台变为后台时执行
		console.log("onHide...")
		this.save()
	},
	onUnload() { // 页面销毁时执行
		console.log("onUnload...")
		this.save()
	},
	save(){ //保存页面数据
		let data={ ...this.data } //当前的页面数据
		delete data.__webviewId__
		wx.setStorageSync('films', data)
	},
	onLoad(e){
		// this.Demo()
		// this.regexTest() 
		this.host='https://www.gow64.com'
		let data=wx.getStorageSync('films') //获取手机缓存的电影数据
		// console.log(data, data.length, typeof data) //没有数据时返回长度是0的空字符串
		if(data)this.setData(data) //还原上次保存的页面数据
	},
	play(e){ //点击列表时准备去播放视频
		let index=e.currentTarget.dataset.index //点击视频的索引号
		wx.navigateTo({ //跳转到播放页面
			url: `player?index=${index}`,
		})
	},
	// 正则表达式
	// ( ) 表示分组
	// \d 任意一位数字
	// \d+ 表示连续多位任意数字，+修饰符， 是个量词，表示它前面的内容至少出现1次
	// [abc] 表示一个字符，可以匹配a，b，c中的任意一个
	// [a-zA-Z] 表示任意英文大小写字符
	// [^a-z] 表示不是小写英文字符的其他任意字符
	// 替换时用 $1代表第一个分组的内容， $2就是第2个分组的内容, ...
	// . 可以匹配一个任意字符，除了换行 \n

	//正则表达式的量词
	// + 至少出现一次    
	// * 至少出现0次
	// ? （1）可以出现0次或1次  （2）出现在其他量词后，表示非贪婪模式
	// {3,100}  可以出现3到100次

	//正则表达式的修饰符，位于正则表达式定界符 /.../ 的后面
	// g - 全局匹配
	// s - 单行模式，使 . 可以匹配任意字符，包括换行\n
	
	data: {
		menuIndex: 2,
		menus: [{
			name: '[刷新]'
		}, {
			name: '[搜索]',
		}, {
			name: '电影',
			selected: true,
			types: [
				{ name: '动作片', id: 14 },
				{ name: '喜剧片', id: 15 },
				{ name: '爱情片', id: 16 },
				{ name: '科幻片', id: 17 },
				{ name: '恐怖片', id: 18 },
				{ name: '剧情片', id: 19 },
				{ name: '战争片', id: 20 },
				{ name: '纪录片', id: 21 },
			]
		}, {
			name: '电视剧',
			types: [
				{ name: '国产剧', id: 5 },
				{ name: '香港剧', id: 6 },
				{ name: '台湾剧', id: 7 },
				{ name: '欧美剧', id: 8 },
				{ name: '韩国剧', id: 9 },
				{ name: '日本剧', id: 10 },
				{ name: '泰国剧', id: 11 },
				{ name: '海外剧', id: 12 },
				{ name: '短剧', id: 13 },
			]
		}, {
			name: '综艺',
			types: [
				{ name: '大陆综艺', id: 22 },
				{ name: '港台综艺', id: 23 },
				{ name: '欧美综艺', id: 24 },
				{ name: '日韩综艺', id: 25 },
			]
		}, {
			name: '动漫',
			types: [
				{ name: '国产动漫', id: 26 },
				{ name: '日韩动漫', id: 27 },
				{ name: '欧美动漫', id: 28 },
				{ name: '海外动漫', id: 29 },
				{ name: '动漫电影', id: 30 },
			]
		}]
	},
	
})